In [8]:
import pandas as pd
import json
import geopandas as gpd


import numpy as np
import pandas as pd

# Указываем путь к .geojson файлу
file_path = 'C:/Users/minot/Desktop/irkutskaia-oblast.geojson'

# Используем функцию read_file() для чтения .geojson файла и создания geopandas.GeoDataFrame
df = gpd.read_file(file_path)

# Выводим первые строки содержимого GeoDataFrame
print(df.head())
        id                                               tags  \
0  2614556  [Дорожно-транспортные происшествия, ДТП и пост...   
1  2732314                [Дорожно-транспортные происшествия]   
2  2604020                [Дорожно-транспортные происшествия]   
3  2603233                [Дорожно-транспортные происшествия]   
4  2713219  [Дорожно-транспортные происшествия, ДТП и пост...   

                                         light  \
0                          Светлое время суток   
1  В темное время суток, освещение отсутствует   
2  В темное время суток, освещение отсутствует   
3  В темное время суток, освещение не включено   
4                          Светлое время суток   

                                   point  \
0  {'lat': 54.900044, 'long': 99.026245}   
1  {'lat': 54.904917, 'long': 99.011149}   
2  {'lat': 54.629636, 'long': 99.854393}   
3  {'lat': 54.887469, 'long': 99.024893}   
4  {'lat': 54.905744, 'long': 99.022962}   

                                              nearby               region  \
0  [Остановка общественного транспорта, Нерегулир...  Нижнеудинский район   
1                                                 []  Нижнеудинский район   
2                                                 []  Нижнеудинский район   
3  [Жилые дома индивидуальной застройки, Нерегули...  Нижнеудинский район   
4                                                 []  Нижнеудинский район   

  scheme                                            address     weather  \
0    930                  г Нижнеудинск, ул Масловского, 16      [Ясно]   
1    870                 г Нижнеудинск, ул Западная 3-я, 20  [Пасмурно]   
2    830  Р-255 Сибирь Новосибирск - Кемерово - Краснояр...  [Пасмурно]   
3    800                 г Нижнеудинск, ул Профсоюзная, 128     [Дождь]   
4    060                    г Нижнеудинск, пер Уватский, 12      [Ясно]   

                 category  ...     severity  \
0    Наезд на препятствие  ...       Легкий   
1       Наезд на пешехода  ...       Легкий   
2       Наезд на пешехода  ...  С погибшими   
3       Наезд на пешехода  ...       Легкий   
4  Наезд на велосипедиста  ...       Легкий   

                                            vehicles dead_count  \
0  [ { "year": 1995, "brand": "ВАЗ", "color": "Бе...          0   
1  [ { "year": 1985, "brand": "ВАЗ", "color": "Кр...          0   
2  [ { "year": 2018, "brand": "MAN", "color": "Бе...          1   
3  [ { "year": null, "brand": null, "color": null...          0   
4  [ { "year": 2017, "brand": "ZOTYE", "color": "...          0   

                                        participants injured_count  \
0                                                [ ]             2   
1  [ { "role": "Пешеход", "gender": "Женский", "v...             1   
2  [ { "role": "Пешеход", "gender": "Женский", "v...             0   
3  [ { "role": "Пешеход", "gender": "Мужской", "v...             1   
4                                                [ ]             1   

       parent_region                                    road_conditions  \
0  Иркутская область  [Отсутствие элементов обустройства остановочно...   
1  Иркутская область     [Иные недостатки, Сухое, Отсутствие освещения]   
2  Иркутская область                                            [Сухое]   
3  Иркутская область                                           [Мокрое]   
4  Иркутская область  [Сухое, Отсутствие, плохая различимость горизо...   

  participants_count                participant_categories  \
0                  3                 [Дети, Все участники]   
1                  2             [Пешеходы, Все участники]   
2                  2             [Пешеходы, Все участники]   
3                  2             [Пешеходы, Все участники]   
4                  2  [Велосипедисты, Дети, Все участники]   

                    geometry  
0  POINT (99.02625 54.90004)  
1  POINT (99.01115 54.90492)  
2  POINT (99.85439 54.62964)  
3  POINT (99.02489 54.88747)  
4  POINT (99.02296 54.90574)  

[5 rows x 21 columns]
In [13]:
data = df.copy()

# Извлечение координат и преобразование их в числовой формат
data['lat'] = data['point'].apply(lambda x: x['lat'])
data['long'] = data['point'].apply(lambda x: x['long'])
X = data[['lat', 'long']].fillna(0)


#Обрезка данных по координатам Иркутской области 
data = data[(data['lat'] >= 51) & (data['long'] >= 95)]
data = data[(data['lat'] <= 64) & (data['long'] <= 120)]
In [27]:
import plotly.express as px

# Вывод карты 
fig = px.scatter_mapbox(data, lat='lat', lon='long', zoom=5)

# Добавление базовой карты, выбор размера карты 
fig.update_layout(mapbox_style="open-street-map",width = 600, height = 600)
In [29]:
#Классификация цвета данных по тяжести ДТП
fig = px.scatter_mapbox(data, lat='lat', lon='long', color='severity', zoom=5, custom_data=['dead_count', 'participants_count', 'injured_count', 'weather', 'road_conditions', 'severity'])

fig.update_layout(mapbox_style="open-street-map", width=600, height=600)
#Вывод данных в всплывающем окне 
fig.update_traces(hovertemplate="<b>Dead count</b>: %{customdata[0]}<br><b>Participants count</b>: %{customdata[1]}<br><b>Injured count</b>: %{customdata[2]}<br><b>Weather</b>: %{customdata[4]}<br><b>Road conditions</b>: %{customdata[5]}<br><b>Severity</b>: %{customdata[6]}")

fig.show()
In [ ]: